package com.dp1.pucp.Ventas.Controlador;

import com.dp1.pucp.Modelo.Clases.Documentoventa;
import com.dp1.pucp.Modelo.Clases.Pedidoproducto;
import com.dp1.pucp.Util.Validaciones;
import com.dp1.pucp.Ventas.DAO.DocVentaDAO;
import com.dp1.pucp.Ventas.VIsta.BuscarPedidoProdGUI;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class BuscarPedidoProdControlador {

    DocVentaDAO dao;
    BuscarPedidoProdGUI buscarPedidoProdGUI;
    DocVentaControlador controlador;
    ArrayList<Pedidoproducto> pedidos = new ArrayList<>();
    ArrayList<String> listaEstados = new ArrayList<>();

    public BuscarPedidoProdControlador(DocVentaDAO dao, BuscarPedidoProdGUI buscarPedidoProdGUI, DocVentaControlador controlador) {
        this.dao = dao;
        this.buscarPedidoProdGUI = buscarPedidoProdGUI;
        this.controlador = controlador;

        this.buscarPedidoProdGUI.addBuscarListener(new buscarListener());
        this.buscarPedidoProdGUI.addCancelarListener(new cancelarListener());
        this.buscarPedidoProdGUI.addGenerarListener(new generarListener());
        this.buscarPedidoProdGUI.addVerDetalleListener(new verDetalleListener());
        this.buscarPedidoProdGUI.addLimpiarListener(new limpiarListener());

        //llenarEstadoCombo();
    }

    class buscarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int codigo = buscarPedidoProdGUI.getCodigo();
            String cliente = buscarPedidoProdGUI.getCliente();
            cliente = cliente.toUpperCase();

            ArrayList<Pedidoproducto> auxiliar = dao.listarPedidoProd(codigo);

            pedidos = new ArrayList<>();
            for (int i = 0; i < auxiliar.size(); i++) {
                if (auxiliar.get(i).getCliente().getRazonsocial().toUpperCase().contains(cliente)) {
                    pedidos.add(auxiliar.get(i));
                }
            }
            //pedidos = realizarFiltro(dao.listarPedidoProd());
            
            buscarPedidoProdGUI.llenaGrilla(pedidos);
        }
    }

    class cancelarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int salida;
            salida = Validaciones.solicitarConfirmacionSalida("buscar Pedido de Producto");
            if (salida == 0) {
                buscarPedidoProdGUI.dispose();
            }
            return;
        }
    }

    class generarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = buscarPedidoProdGUI.getFilaSel();

            if (sel != -1) {
                Pedidoproducto p = pedidos.get(sel);

                //Verificar que el pedido de producto no tenga un documento de venta asociado
                ArrayList<Documentoventa> docventas = dao.listarDocVentas(0, 0);
                for (int i = 0; i < docventas.size(); i++) {
                    if ((docventas.get(i).getPedidoproducto().getIdpedidoproducto() == p.getIdpedidoproducto()) && (docventas.get(i).getEstado() != 0)) {
                        Validaciones.mostrarMensajeErrorVal("Este pedido ya tiene un documento de venta asociado");
                        return;
                    }
                }

                buscarPedidoProdGUI.dispose();
                controlador.llenaFormulario(p);
                controlador.setCliente(p.getCliente());
                //controlador.calcularIGV();

            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar un Pedido de Producto.");
            }
        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            buscarPedidoProdGUI.LimpiarDatos();
        }
    }

    class verDetalleListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
        }
    }
//    public void llenarEstadoCombo(){
//        listaEstados = dao.listarEstado();
//        buscarPedidoProdGUI.llenaComboEstado(listaEstados);
//        
//    }

    public ArrayList<Pedidoproducto> realizarFiltro(ArrayList<Pedidoproducto> lista) {
        ArrayList<Pedidoproducto> listPedidoproducto = new ArrayList<>();
        ArrayList<Pedidoproducto> tempListPedidoproducto;

        tempListPedidoproducto = lista;

        if (buscarPedidoProdGUI.getCodigo() != 0) {

            for (int i = 0; i < tempListPedidoproducto.size(); i++) {
                if (tempListPedidoproducto.get(i).getIdpedidoproducto() == buscarPedidoProdGUI.getCodigo()) {
                    listPedidoproducto.add(tempListPedidoproducto.get(i));
                }
            }
        } else {
            listPedidoproducto = tempListPedidoproducto;
        }

        tempListPedidoproducto = listPedidoproducto;
        listPedidoproducto = new ArrayList<>();


        if (!buscarPedidoProdGUI.getCliente().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListPedidoproducto.size(); i++) {
                if (tempListPedidoproducto.get(i).getCliente().getRazonsocial().toUpperCase().contains(buscarPedidoProdGUI.getCliente().toUpperCase())) {
                    listPedidoproducto.add(tempListPedidoproducto.get(i));
                }
            }
        } else {
            listPedidoproducto = tempListPedidoproducto;
        }

        return listPedidoproducto;
    }
}